package com.sky.controller;

import com.sky.domain.PmsCategory;
import com.sky.service.PmsCategoryService;
import com.sky.utils.R;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/pmsCategory")
public class PmsCategoryController {

    @Resource
    private PmsCategoryService pmsCategoryService;

    /**
     * 此方法通过GET请求映射到/list/tree路径，用于获取分类数据并以树形结构返回。
     *
     * @return R对象，其中包含了转换为树形结构的PmsCategory列表。
     *         R对象通常是一个封装了HTTP响应状态和数据的自定义类。
     */
    @GetMapping("/list/tree")
    public R listAsTree() {
        // 调用pmsCategoryService的服务方法获取转换为树形结构的分类列表
        List<PmsCategory> list = pmsCategoryService.listAsTree();

        // 返回一个表示成功的R对象，将分类列表作为数据内容
        return R.ok(list);
    }

    /**
     * 通过PUT请求添加商品分类。
     *
     * @param pmsCategory 商品分类对象，包含要添加的分类的信息。
     * @return 如果添加成功，返回一个表示成功的R对象；如果添加失败，返回一个表示失败的R对象。
     */
    @PostMapping("/add")
    public R add(@RequestBody PmsCategory pmsCategory) {
        // 调用pmsCategoryService的服务方法添加分类
        boolean result = pmsCategoryService.save(pmsCategory);
        // 返回一个表示成功或失败的R对象
        return result ? R.ok() : R.error();
    }

    /**
     * 通过@RequestBody注解将请求体中的数据绑定到pmsCategory对象中，
     * @PostMapping注解指定了更新分类的请求方法和请求路径。
     *
     * @param pmsCategory 分类信息对象，包含需要更新的数据。
     * @return 如果更新成功，返回一个表示成功的R对象；如果更新失败，返回一个表示失败的R对象。
     */
    @PostMapping("/update")
    public R update(@RequestBody PmsCategory pmsCategory) {
        // 调用pmsCategoryService的服务方法更新分类
        boolean result = pmsCategoryService.updateCategory(pmsCategory);

        // 返回一个表示成功或失败的R对象
        return result ? R.ok() : R.error();
    }

    /**
     * 通过ID删除分类。
     *
     * @param catId 分类ID，用于指定要删除的分类。
     * @return 如果删除成功，返回成功的响应码；如果删除失败，返回错误的响应码。
     */
    @DeleteMapping("/delete")
    public R delete(@RequestParam("catId") Long catId) {
        // 调用pmsCategoryService的服务方法删除分类
        boolean result = pmsCategoryService.removeById(catId);

        // 返回一个表示成功或失败的R对象
        return result ? R.ok() : R.error();
    }
}
